#include<stdio.h>
void swap(char* e1, char* e2, int with);
int compare(const void* e1, const void* e2);
void bubble(void* base, int sz, int with, int (*compare)(const void* e1, const void* e2)) {
	for (int i = 0; i < sz - 1; i++) {
		for (int j = 0; j < sz - 1; j++) {
			if (compare((char*)base + j * with, (char*)base + (j + 1) * with)>0) {
				swap((char*)base + j * with, (char*)base + (j + 1) * with, with);
				
			}
		}
	}
}
int compare(const void* e1, const void* e2) {
	return (*(int*)e1 - *(int*)e2);
}
void swap(char* e1, char* e2, int with) {
	for (int i = 0; i < with; i++) {
		char e3 = *e1;
		*e1 = *e2;
		*e2 = e3;
		e1++;
		e2++;
	}
}
int main() {
	int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
	bubble(arr, 10, 4, compare);
	for (int i = 0; i < 10; i++) {
		printf("%d ", arr[i]);
	}
	return 0;
}